﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
using System.Globalization;

using System.Security.Cryptography;

namespace GesPro
{
    public partial class Principale : Form
    {

        Acces Acces = new Acces();
        Connexion connexion = new Connexion();

        CultureInfo calendrier = CultureInfo.CurrentCulture;

        ClasseurEmployes classeurEmploye = new ClasseurEmployes();
        List<Employe> ListeEmploye;
        Employe Utilisateur = new Employe();
        Employe FicheEmploye = new Employe();

        ClasseurRapports classeurRapports = new ClasseurRapports();
        Rapport rapport;

        ClasseurProjets classeurProjets = new ClasseurProjets();
        List<Projet> ListeProjets;
        Projet FicheProjet = new Projet();
        GenerateurRapport Object_Rapport = new GenerateurRapport();

        public Principale()
        {
            InitializeComponent();
        }


        /// <summary>
        /// Initialisation de l'interface principale à son ouverture.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {

            if (!File.Exists(Path.GetDirectoryName(Application.ExecutablePath) + "\\GesPro.cfg"))
        	{
                AccesPreferences.CréerFichierConfig();
	        }


            BloquerAcces();
            if(Acces.Authentifier(classeurEmploye.ObtenirEmployes()))
            {
              switch (Acces.Niveau)
                {
                case 0:
                    ActiverAccèsEmploye();
                    break;
                case 1:
                    ActiverAccèsGestionnaireProjet();
                    break;
                case 2:
                    ActiverAccèsGestionnaireRH();
                    break;
                case 3:
                    ActiverAccèsAdmin();
                    break;
                default:
                    Utilisateur = new Employe();
                    BloquerAcces();
                    break;
                }
              Utilisateur = Acces.FicheUtilisateur;
            }
            else
            {
                Utilisateur = new Employe();
                BloquerAcces();
            }
            
            

            refreshListeEmploye(true);
            refreshListeResponsable();
            refreshListeProjet();

            radEmpNouveau.Checked = true;
            btEmpModif.Enabled = false;
            btEmpEffacer.Enabled = false;
            radProNouveau.Checked = true;
            cbEmpNiveau.SelectedIndex = 2;
            cbListeEmploye.Enabled = false;
            cbListeProjet.Enabled = false;

            tbEmpMdp.Text = string.Empty;
            tbEmpNom.Text = string.Empty;
            tbEmpTitre.Text = string.Empty;
            tbEmpUtilisateur.Text = string.Empty;
            cbEmpNiveau.SelectedIndex = 0;

            cbProResponsable.SelectedIndex = 0;
            cbProType.SelectedIndex = 0;

            numRapportAnnee.Value = DateTime.Now.Year;
            
            EffacerFicheRapport();
            EffacerFicheEmploye();

            cbRapportSemaine.SelectedIndex = (calendrier.Calendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday) - 1);

        }


        /// <summary>
        /// Menu : Connexion de l'utilisateur.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void connexionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Acces.Authentifier(classeurEmploye.ObtenirEmployes()))
            {
                switch (Acces.Niveau)
                {
                    case 0:
                        ActiverAccèsEmploye();
                        break;
                    case 1:
                        ActiverAccèsGestionnaireProjet();
                        break;
                    case 2:
                        ActiverAccèsGestionnaireRH();
                        break;
                    case 3:
                        ActiverAccèsAdmin();
                        break;
                    default:
                        Utilisateur = new Employe();
                        BloquerAcces();
                        break;
                }
                Utilisateur = Acces.FicheUtilisateur;
            }
            else
            {
                Utilisateur = new Employe();
                BloquerAcces();
            }
        }

        /// <summary>
        /// Menu : Fermeture de l'application.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void quitterToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Close();
        }

        /// <summary>
        /// Menu : Génération de rapport de projet.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void rapportDeProjetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            List<string> listeNomProjets = new List<string>();
            List<Projet> listeProjets;
            listeProjets = classeurProjets.ObtenirProjets();
            foreach (Projet projet in listeProjets)
            {
                listeNomProjets.Add(projet.Nom);
            }
            RapportProjet rapportProjet = new RapportProjet(listeNomProjets);
            rapportProjet.ShowDialog();

            if (rapportProjet.AGenerer)
            {
                List<Rapport> ListeRapport;
                Projet Var_Projet;

                Var_Projet = classeurProjets.ObtenirProjet(rapportProjet.NomProjet);
                ListeRapport = classeurRapports.ObtenirRapportProjet(rapportProjet.NomProjet);
                Object_Rapport.CreerRapportProjet(ListeRapport, Var_Projet, rapportProjet.Details);
            }
        }

        /// <summary>
        /// Menu : Génération de rapport d'employé.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void rapportDemployéToolStripMenuItem_Click(object sender, EventArgs e)
        {
            List<string> listeNomEmploye = new List<string>();
            List<Employe> listeEmploye;
            listeEmploye = classeurEmploye.ObtenirEmployes();
            foreach (Employe employe in listeEmploye)
            {
                listeNomEmploye.Add(employe.Nom);
            }
            RapportEmploye rapportEmploye = new RapportEmploye(listeNomEmploye);
            rapportEmploye.ShowDialog();

            if (rapportEmploye.Agenerer)
	        {
                List<Rapport> ListeRapport = new List<Rapport>();
                Employe Var_Employe;

                Var_Employe = classeurEmploye.ObtenirEmploye(rapportEmploye.NomEmploye);
                if (Var_Employe != null)
                {

                    switch (rapportEmploye.Type)
                    {
                        case RapportEmploye.Options.Hebdo:
                            ListeRapport = classeurRapports.ObtenirRapportEmploye(rapportEmploye.NomEmploye,
                            rapportEmploye.AnneeDebut,
                            rapportEmploye.AnneeDebut,
                            rapportEmploye.SemaineDebut,
                            rapportEmploye.SemaineDebut);
                            break;
                        case RapportEmploye.Options.periode:
                            ListeRapport = classeurRapports.ObtenirRapportEmploye(rapportEmploye.NomEmploye,
                            rapportEmploye.AnneeDebut,
                            rapportEmploye.AnneeFin,
                            rapportEmploye.SemaineDebut,
                            rapportEmploye.SemaineFin);
                            break;
                        case RapportEmploye.Options.complet:
                            ListeRapport = classeurRapports.ObtenirRapportEmploye(rapportEmploye.NomEmploye,
                                                                                Convert.ToInt32(numRapportAnnee.Minimum),
                                                                                Convert.ToInt32(numRapportAnnee.Maximum),
                                                                                0,
                                                                                52);
                            break;
                        default:
                            break;
                    }
                    if (rapportEmploye.Complet)
                    {
                        ListeRapport = classeurRapports.ObtenirRapportEmploye(rapportEmploye.NomEmploye,
                                    Convert.ToInt32(numRapportAnnee.Minimum),
                                    Convert.ToInt32(numRapportAnnee.Maximum),
                                    0,
                                    52);
                    }
                    else if (rapportEmploye.Hebdo)
                    {
                        ListeRapport = classeurRapports.ObtenirRapportEmploye(rapportEmploye.NomEmploye,
                                    rapportEmploye.AnneeDebut,
                                    rapportEmploye.AnneeDebut,
                                    rapportEmploye.SemaineDebut,
                                    rapportEmploye.SemaineDebut);
                    }
                    else if (rapportEmploye.Periode)
                    {
                        ListeRapport = classeurRapports.ObtenirRapportEmploye(rapportEmploye.NomEmploye,
                                                        rapportEmploye.AnneeDebut,
                                                        rapportEmploye.AnneeFin,
                                                        rapportEmploye.SemaineDebut,
                                                        rapportEmploye.SemaineFin);
                    }
                    Object_Rapport.CreerRapportEmploye(ListeRapport, Var_Employe, rapportEmploye.Detail, (int)rapportEmploye.Type);
		     
                }
                
	        }
        }


        private void àProposDeGesProToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Apropos Apropos = new Apropos();
            Apropos.ShowDialog();
        }

        private void NewEmp_CheckedChanged(object sender, EventArgs e)
        {
            cbListeEmploye.Enabled = false;
            btEmpModif.Enabled = false;
            btEmpEffacer.Enabled = false;
            btEmpCreer.Enabled = true;

            EffacerFicheEmploye();

        }

        private void ExistEmpl_CheckedChanged(object sender, EventArgs e)
        {
            cbListeEmploye.Enabled = true;
            btEmpModif.Enabled = true;
            btEmpEffacer.Enabled = true;
            btEmpCreer.Enabled = false;

            refreshInfoEmploye();

        }

        private void ExistProject_CheckedChanged(object sender, EventArgs e)
        {
            cbListeProjet.Enabled = true;
            btProjetCreer.Enabled = false;
            btProjetEffacer.Enabled = true;
            btProjetModif.Enabled = true;
        }

        private void NewProject_CheckedChanged(object sender, EventArgs e)
        {
            cbListeProjet.Enabled = false;
            btProjetCreer.Enabled = true;
            btProjetEffacer.Enabled = false;
            btProjetModif.Enabled = false;
        }

        /// <summary>
        /// Mise à jour de l'onglet sélectionné.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tabOngletGeneral_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabOngletGeneral.SelectedIndex == 2)
            {
                
                rapport = new Rapport(Utilisateur.Nom);
                refreshListeProjet();

            }
            if (tabOngletGeneral.SelectedIndex == 1)
            {
                refreshListeEmploye(false);
            }
            if (tabOngletGeneral.SelectedIndex == 0)
            {
                refreshListeProjet();
                refreshListeResponsable();
            }


        }

        private void button6_Click(object sender, EventArgs e)
        {
            classeurEmploye.AjouterEmploye(tbEmpNom.Text,
                                           tbEmpTitre.Text,
                                           tbEmpNumero.Text,
                                           Convert.ToChar(cbEmpNiveau.SelectedIndex),
                                           tbEmpUtilisateur.Text,
                                           tbEmpMdp.Text,
                                           tbEmpCourriel.Text,
                                           tbEmpTelephone.Text,
                                           tbEmpNote.Text);

            refreshListeEmploye(true);
            EffacerFicheEmploye();

      

        }

        /// <summary>
        /// Mise à jour de la liste d'employés dans l'onglet de gestion des employés.
        /// </summary>
        /// <param name="resetIndex"></param>
        private void refreshListeEmploye(bool resetIndex)
        {
            int tempIndex = cbListeEmploye.SelectedIndex;

            cbListeEmploye.Items.Clear();
            ListeEmploye = classeurEmploye.ObtenirEmployes();

            foreach (Employe employe in ListeEmploye)
            {
                cbListeEmploye.Items.Add(employe.Nom);
            }
            try
            {
                cbListeEmploye.SelectedIndex = tempIndex;
            }
            catch (Exception)
            {
            }

            if (cbListeEmploye.Items.Count > 0 & resetIndex)
            {
                cbListeEmploye.SelectedIndex = 0;
            } 
           

        }

        /// <summary>
        /// Mise à jour de la fiche d'employé avec un employé sélectionné.
        /// </summary>
        private void refreshInfoEmploye()
        {
            FicheEmploye = classeurEmploye.ObtenirEmploye(cbListeEmploye.Text);
            if (FicheEmploye != null)
            {
                tbEmpNom.Text = FicheEmploye.Nom;
                tbEmpTitre.Text = FicheEmploye.Titre;
                tbEmpNumero.Text = FicheEmploye.Numero;
                cbEmpNiveau.SelectedIndex = FicheEmploye.Acces;
                tbEmpUtilisateur.Text = FicheEmploye.Utilisateur;
                tbEmpMdp.Text = FicheEmploye.Mdp;
                tbEmpCourriel.Text = FicheEmploye.Courriel;
                tbEmpTelephone.Text = FicheEmploye.Telephone;
                tbEmpNote.Text = FicheEmploye.Note;               
            }


        }

        /// <summary>
        /// Mise à jour de la liste de projet dans l'onglet des projets.
        /// </summary>
        private void refreshListeProjet()
        {
            cbRapportProjet.Items.Clear();
            cbListeProjet.Items.Clear();
            ListeProjets = classeurProjets.ObtenirProjets();

            foreach (Projet projet in ListeProjets)
            {
                cbRapportProjet.Items.Add(projet.Nom);
                cbListeProjet.Items.Add(projet.Nom);
            }
            if (cbListeProjet.Items.Count > 0)
            {
                cbListeProjet.SelectedIndex = 0;
            }
            if (cbRapportProjet.Items.Count > 0)
            {
                cbRapportProjet.SelectedIndex = 0;
            }

        }

        /// <summary>
        /// Mise à jour des informations de la fiche de projet avec le projet sélectionné.
        /// </summary>
        private void refreshInfoProjet()
        {

            //ListeProjets = classeurProjets.ObtenirProjets();

            FicheProjet = classeurProjets.ObtenirProjet(cbListeProjet.Text);
            /*
            foreach (Projet projet in ListeProjets)
            {
                if (projet.Nom == cbListeProjet.Text )
                {
                    FicheProjet = projet;
                }

            }
            */
            tbProNom.Text = FicheProjet.Nom; 
            cbProResponsable.Text = FicheProjet.Responsable;
            numProHeures.Value = FicheProjet.Heures;
            //Convert.ToChar(cbProType.SelectedIndex), 
            tpProLivraison.Text = FicheProjet.Date;
            tbProDescription.Text = FicheProjet.Description;
            tbProObjectifs.Text = FicheProjet.Objectifs;
        }

        private void cbListeEmploye_SelectionChangeCommitted(object sender, EventArgs e)
        {
            refreshInfoEmploye();      
        }

        /// <summary>
        /// Bouton de modification d'employé.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btEmpModif_Click(object sender, EventArgs e)
        {
            bool toto = false;
            toto = classeurEmploye.EmployeExiste(tbEmpNumero.Text, ClasseurEmployes.TypeRecherche.Code);
            classeurEmploye.ModifierEmploye(FicheEmploye.Utilisateur,
                               FicheEmploye.Numero,
                               tbEmpNom.Text,
                               tbEmpTitre.Text,
                               tbEmpNumero.Text,
                               Convert.ToChar(cbEmpNiveau.SelectedIndex),
                               tbEmpUtilisateur.Text,
                               tbEmpMdp.Text,
                               tbEmpCourriel.Text,
                               tbEmpTelephone.Text,
                               tbEmpNote.Text);

           
            refreshListeEmploye(false);
            

        }

        /// <summary>
        /// Bouton de suppression d'un employé.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btEmpEffacer_Click(object sender, EventArgs e)
        {
            classeurEmploye.EffacerEmploye(tbEmpUtilisateur.Text, tbEmpNumero.Text);
            refreshListeEmploye(true);
            EffacerFicheEmploye();
           
        }

        /// <summary>
        /// Effacer la fiche d'employé affiché de l'onglet employé.
        /// </summary>
        private void EffacerFicheEmploye()
        {
            tbEmpNom.Text = string.Empty;
            tbEmpTitre.Text = string.Empty;
            tbEmpNumero.Text = string.Empty;
            cbEmpNiveau.SelectedIndex = 0;
            tbEmpUtilisateur.Text = string.Empty;
            tbEmpMdp.Text = string.Empty;
            tbEmpCourriel.Text = string.Empty;
            tbEmpTelephone.Text = string.Empty; ;
            tbEmpNote.Text = string.Empty;
            FicheEmploye = new Employe();

        }

        /// <summary>
        /// Bouton de création d'un projet.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btProjetCreer_Click(object sender, EventArgs e)
        {
            classeurProjets.AjouterProjet(tbProNom.Text, 
                                          cbProResponsable.Text, 
                                          numProHeures.Value, 
                                          Convert.ToChar(cbProType.SelectedIndex), 
                                          tpProLivraison.Text, 
                                          tbProDescription.Text, 
                                          tbProObjectifs.Text);

            refreshListeProjet();
            EffacerFicheProjet();
        }

        /// <summary>
        /// Mise à jour de la liste de responsable dans l'onglet de projet.
        /// </summary>
        private void refreshListeResponsable()
        {
            cbProResponsable.Items.Clear();
            ListeEmploye = classeurEmploye.ObtenirEmployes();

            foreach (Employe employe in ListeEmploye)
            {
                cbProResponsable.Items.Add(employe.Nom);
            }
            if (cbProResponsable.Items.Count > 0)
            {
                cbProResponsable.SelectedIndex = 0;
            }
        }

        private void cbListeProjet_SelectionChangeCommitted(object sender, EventArgs e)
        {
            refreshInfoProjet();
        }

        /// <summary>
        /// Bouton de modification d'un projet.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btProjetModif_Click(object sender, EventArgs e)
        {
            classeurProjets.ModifierProjet(FicheProjet.Nom,
                                          tbProNom.Text,
                                          cbProResponsable.Text,
                                          numProHeures.Value,
                                          Convert.ToChar(cbProType.SelectedIndex),
                                          tpProLivraison.Text,
                                          tbProDescription.Text,
                                          tbProObjectifs.Text);
            refreshListeProjet();
            refreshInfoProjet();
            
        }

        /// <summary>
        /// Bloquer les accès au logiciel.
        /// </summary>
        public void BloquerAcces()
        {
            tabOngletGeneral.Enabled = false;
            StripMenuPrincipal.Items[1].Enabled = false;
            StripMenuPrincipal.Items[2].Enabled = false;
        }

        /// <summary>
        /// Permettre l'accès d'administrateur à l'interface.
        /// </summary>
        public void ActiverAccèsAdmin()
        {
            tabOngletGeneral.Enabled = true;
            StripMenuPrincipal.Items[1].Enabled = true;
            StripMenuPrincipal.Items[2].Enabled = true;
            DésactiverOnglet(tabOngletGeneral.TabPages[0], true);
            DésactiverOnglet(tabOngletGeneral.TabPages[1], true);
            DésactiverOnglet(tabOngletGeneral.TabPages[2], true);
        }
        /// <summary>
        /// Permettre l'accès d'employé à l'interface.
        /// </summary>
        public void ActiverAccèsEmploye()
        {
            tabOngletGeneral.Enabled = true;
            StripMenuPrincipal.Items[1].Enabled = false;
            StripMenuPrincipal.Items[2].Enabled = false;
            DésactiverOnglet(tabOngletGeneral.TabPages[0], false);
            DésactiverOnglet(tabOngletGeneral.TabPages[1], false);
            DésactiverOnglet(tabOngletGeneral.TabPages[2], true);
        }
        /// <summary>
        /// Permettre l'accès de gestionnaire de projet à l'interface.
        /// </summary>
        public void ActiverAccèsGestionnaireProjet()
        {
            tabOngletGeneral.Enabled = true;
            StripMenuPrincipal.Items[1].Enabled = false;
            StripMenuPrincipal.Items[2].Enabled = true;
            DésactiverOnglet(tabOngletGeneral.TabPages[0], true);
            DésactiverOnglet(tabOngletGeneral.TabPages[1], false);
            DésactiverOnglet(tabOngletGeneral.TabPages[2], true);
        }
        /// <summary>
        /// Permettre l'accès de ressource humaine à l'interface.
        /// </summary>
        public void ActiverAccèsGestionnaireRH()
        {
            tabOngletGeneral.Enabled = true;
            StripMenuPrincipal.Items[1].Enabled = false;
            StripMenuPrincipal.Items[2].Enabled = false;
            DésactiverOnglet(tabOngletGeneral.TabPages[0], false);
            DésactiverOnglet(tabOngletGeneral.TabPages[1], true);
            DésactiverOnglet(tabOngletGeneral.TabPages[2], false);
        }

        /// <summary>
        /// Activer/Désactiver l'onglet sélectionné.
        /// </summary>
        /// <param name="page">Index de l'onglet</param>
        /// <param name="enable">Activer/Désactiver</param>
        public static void DésactiverOnglet(TabPage onglet, bool activation)
        {
            ActiverControl(onglet.Controls, activation);
        }

        private static void ActiverControl(Control.ControlCollection controls, bool activation)
        {
            foreach (Control control in controls)
            {
                control.Enabled = activation;
                //ActiverControl(control.Controls, activation);
            }
        }

        /// <summary>
        /// Mise à jour des sections dans l'onglet rapport.
        /// </summary>
        private void refreshListeSectionsRapport()
        {
            lbRapportSections.Items.Clear();

            foreach (SectionRapport sectionRapport in rapport.Sections)
            {
                lbRapportSections.Items.Add(sectionRapport.Projet);
            }
            if (lbRapportSections.Items.Count > 0)
            {
                lbRapportSections.SelectedIndex = 0;
            }

        }

        /// <summary>
        /// Bouton d'ajout d'une section de rapport.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btRapportAjouter_Click(object sender, EventArgs e)
        {
            SectionRapport section = new SectionRapport(Convert.ToInt32(cbRapportSemaine.Text),
                                                        Convert.ToInt32(numRapportAnnee.Value),
                                                        cbRapportProjet.Text,
                                                        numRapportHeures.Value,
                                                        tbRapportTaches.Text,
                                                        tbRapportProblemes.Text,
                                                        tbRapportSolutions.Text);

            rapport.Sections.Add(section);
            EffacerFicheRapport();
            refreshListeSectionsRapport();
            numRapportAnnee.Enabled = false;
            cbRapportSemaine.Enabled = false;
            VérifierSection();

        }
        /// <summary>
        /// Bouton de soumission d'un rapport.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btRapportSoumettre_Click(object sender, EventArgs e)
        {

            classeurRapports.AjouterRapport(rapport, cbRapportSemaine.Text, numRapportAnnee.Value);
            rapport.Sections.Clear();
            EffacerFicheRapport();
            cbRapportSemaine.SelectedIndex = (calendrier.Calendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday) - 1);
            numRapportAnnee.Value = DateTime.Now.Year;
            VérifierSection();
        }
         
        /// <summary>
        /// Bouton de suppression d'une section de rapport.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btRapportEffacer_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < (rapport.Sections.Count- 1); i++)
            {

                if (rapport.Sections[i].Projet == lbRapportSections.Text )
                {
                    rapport.Sections.RemoveAt(i);
                }
            }
            EffacerFicheRapport();
            refreshListeSectionsRapport();
        }

        /// <summary>
        /// Bouton de suppression d'un projet.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btProjetEffacer_Click(object sender, EventArgs e)
        {
            classeurProjets.EffacerProjet(cbListeProjet.Text);
            EffacerFicheProjet();
            refreshListeProjet();

        }

        /// <summary>
        /// Effacer la fiche d'information d'un projet affiché.
        /// </summary>
        private void EffacerFicheProjet()
        {
            tbProNom.Text = string.Empty;
            if (cbProResponsable.Items.Count > 0)
            {
                cbProResponsable.SelectedIndex = 0; 
            }


            numProHeures.Value = 0;
            cbProType.SelectedIndex = 0;
            tpProLivraison.Value = DateTime.Now;
            tbProDescription.Text = string.Empty;
            tbProObjectifs.Text = string.Empty;
        
        
        }
      
        /// <summary>
        /// Bouton pour annuler une section de rapport.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btRapportAnnuler_Click(object sender, EventArgs e)
        {
            rapport = new Rapport(Utilisateur.Nom);
            refreshListeSectionsRapport();
            EffacerFicheRapport();
            VérifierSection();

  
        }
        /// <summary>
        /// Bouton pour effacer la fiche de rapport affiché.
        /// </summary>
        private void EffacerFicheRapport()
        {
            int semaine;
            semaine = calendrier.Calendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday);
            labRapportNumeroSemaineActuelle.Text = Convert.ToString(semaine);
            for (int i = 1; i <= 52; i++)
            {
                cbRapportSemaine.Items.Add(i);
            }
            if (cbRapportProjet.Items.Count > 0)
            {
                cbRapportProjet.SelectedIndex = 0;    
            }
            
            
            numRapportHeures.Value = 0;
            tbRapportTaches.Text = string.Empty;
            tbRapportProblemes.Text = string.Empty;
            tbRapportSolutions.Text = string.Empty;
            lbRapportSections.Items.Clear();

            cbRapportSemaine.Enabled = true;
            numRapportAnnee.Enabled = true;

        }
        /// <summary>
        /// Bouton pour modifier une section de rapport.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btRapportModifier_Click(object sender, EventArgs e)
        {

            foreach (SectionRapport section in rapport.Sections)
            {
                if (section.Projet == lbRapportSections.Text)
                {
                    section.Heures = numRapportHeures.Value;
                    section.Taches = tbRapportTaches.Text;
                    section.Problemes = tbRapportProblemes.Text;
                    section.Solutions = tbRapportSolutions.Text;
                    section.Projet = cbRapportProjet.Text;

                }


            }

        }

        private void lbRapportSections_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach(SectionRapport section in rapport.Sections)
            { 
                if(section.Projet == lbRapportSections.Text)
                {
                    numRapportHeures.Value =  section.Heures;
                    tbRapportTaches.Text = section.Taches;
                    tbRapportProblemes.Text = section.Problemes;
                    tbRapportSolutions.Text = section.Solutions;
                    cbRapportProjet.Text = section.Projet;

                }


            }
        }

        private void cbRapportProjet_SelectedIndexChanged(object sender, EventArgs e)
        {
            VérifierSection();
        }

        /// <summary>
        /// Ajuster les boutons de gestions des sections.
        /// </summary>
        private void VérifierSection()
        {
            btRapportAjouter.Enabled = true;
            btRapportModifier.Enabled = false;
            btRapportEffacer.Enabled = false;

            if (rapport != null)
            {
                if (lbRapportSections.Items.Contains(cbRapportProjet.Text))
                {
                    btRapportAjouter.Enabled = false;
                    btRapportModifier.Enabled = true;
                    btRapportEffacer.Enabled = true;
                }

            } 
        }
        /// <summary>
        /// Menu : Préférences.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void préférencesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string OldMotEncodage = AccesPreferences.ObtenirMotEncodage();
            AccesPreferences preferences = new AccesPreferences();
            preferences.ShowDialog();
            if (AccesPreferences.ObtenirMotEncodage() != OldMotEncodage)
            {
                classeurEmploye.RecrypterClasseur(OldMotEncodage);
                classeurProjets.RecrypterClasseur(OldMotEncodage);
                classeurRapports.RecrypterClasseur(OldMotEncodage);
            }
                   

        }
        
    }
}
